package com.crungoo.beans;

import com.crungoo.AppConfig;
import com.crungoo.service.MyService3;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @author fujc-dev@qq.com
 * @description TODO
 * @date 2023/6/28 13:19
 */

public class Programs {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
		System.out.println(context.getBean(MyService3.class));
		System.out.println(context.getBean("myService3"));
		System.out.println(context.getBean("&myService3"));
		// Configration 的@Bean 与FactoryBean好像都使用new的方式构建Bean
		// 他们的区别是什么？
		// MyService3FactoryBean 是经过了完整Spring Bean的声明周期
		// AppConfig 的@Bean 也是经过了完整Spring Bean的声明周期
		// MyService3FactoryBean getObject 返回的Bean是没有经过完整Spring Bean的生命周期的。
		// 但是getObject是走了初始化后的，这是为了AOP所实现。

		//通过@Bean也可以自己生成一个对象作为Bean，
		// 那么和FactoryBean的区别是什么呢？其实在很多场景下他俩是可以替换的，
		// 但是站在原理层面来说的，区别很明显，@Bean定义的Bean是会经过完整的Bean生命周期的。
	}
}
